iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
Mobile Development

Android Studio 30天學習系列 第 9

Android Studio 30天學習-DAY09_Fragment按鈕切換畫面

  • 分享至 

  • xImage
  •  

Fragment功能簡單述說

這個物件的效果是畫面之間的轉換,fragment與其他的畫面跳轉更加節省資源,其原因是因為他有刪除你上一個畫面的資源,然後新增下一個你點選的畫面資源,而這個動作有涉及到Fragment的生命週期的運作,我目前並沒有實際操作過Fragment生命週期,只知道它的流程,我這邊先貼上官方的生命週期圖,有興趣的可以到官方網站研究。

dependencies依賴元件

參考來源:AndroidStudio官方網站的環境設定

def fragment_version = "1.5.2"
    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"

fragment新增檔案

  1. 到java/project檔案夾底下點擊右鍵新增fragment的空白項目
    https://ithelp.ithome.com.tw/upload/images/20220803/20150370BmfX20a6ng.png
  2. 新增完成後先到fragment的XML檔案更改畫面資訊,最少新增兩個以上的fragment,比較容易觀察到換頁面的效果。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".BlankFragment_Scene01">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Fragment01"
        android:textAlignment="center"
        android:textSize="50dp"/>

</FrameLayout>
  1. 更改完後來到主頁面新增Fragment元件在畫面中央,我是結合了前面的GuideLine以及對齊功能進行畫面的編排。
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragmentView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/toolbar0001"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="@id/guideline5"
        tools:ignore="MissingConstraints" />

功能副程式撰寫

  • 使用按鈕點擊事件切換Fragment,切換方式是在原本的Fragment元件上進行.replace替換成指定的fragment。
   public void getFrag01(){
        BlankFragment_Scene01 fragment01= BlankFragment_Scene01.newInstance(null,null);
        this.redirectTo(fragment01);
    }

    public void getFrag02(){
        BlankFragment_Scene02 fragment02 = BlankFragment_Scene02.newInstance(null,null);
        this.redirectTo(fragment02);
    }
    public void getFrag03(){
        BlankFragment_Scene03 fragment03 = BlankFragment_Scene03.newInstance(null,null);
        this.redirectTo(fragment03);
    }

    private  void redirectTo(Fragment fragment)
    {
        FragmentManager fragmentManager = this.getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        fragmentTransaction.replace(R.id.fragmentView,fragment);
        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        fragmentTransaction.commit();
    }
  • 功能撰寫完之後就使用按鈕點擊事件
        button01 = findViewById (R.id.Button01);
        button02 = findViewById (R.id.Button02);
        button03 = findViewById (R.id.Button03);


        button01.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick (View view) {
                getFrag01 ();
            }
        });
        button02.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick (View view) {
                getFrag02 ();
            }
        });
        button03.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick (View view) {
                getFrag03 ();
            }
        });

結果展示

點選按鈕後就會執行點擊事件將畫面替換成該指定的fragment頁面。


以上是今天練習的fragment功能,明天會練習ViewPager以及TabLayout


上一篇
Android Studio 30天學習-DAY08_ToolBar、ActionBar
下一篇
Android Studio 30天學習-DAY10_TabLayout、ViewPager滑動畫面
系列文
Android Studio 30天學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言